package io.renren.common.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

public class PropertyUtil {

	public static PropertyUtil instance = null;
	private static Map<String, String> dataMap = new HashMap<String, String>();

	/**
	 * 单例获取实例
	 * @param fileName
	 * @return
	 */
	public static PropertyUtil getInstance(String fileName) {
		if (null == instance) {
			instance = new PropertyUtil(fileName);
		}
		return instance;
	}
	
	/**
	 * 单例获取实例
	 * @return
	 */
	public static PropertyUtil getInstance() {
		if (null == instance) {
			instance = new PropertyUtil();
		}
		return instance;
	}

	/**
	 * 得到值
	 * 
	 * @param key
	 * @return
	 */
	public String getValue(String key) {
		return dataMap.get(key);
	}

	/**
	 * 加载文件
	 * 
	 * @param fileName
	 */
	private PropertyUtil(String filePath) {
		Properties prop = new Properties();
		InputStream ins = null;
		try {
			ins = PropertyUtil.class.getClass().getResourceAsStream(filePath);
			prop.load(ins); // /加载属性列表
			Iterator<String> it = prop.stringPropertyNames().iterator();
			while (it.hasNext()) {
				String key = it.next();
				dataMap.put(key, prop.getProperty(key));
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("读取" + filePath + "文件失败，失败原因:" + e.getMessage());
		} finally {
			if (null != ins) {
				try {
					ins.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw new RuntimeException("关闭 读取properties的文件流失败，失败原因：" + e.getMessage());
				}
				ins = null;
			}
		}
	}
	
	/**
	 * 加载文件
	 */
	private PropertyUtil() {
		String filePath ="/config/config.properties";
		Properties prop = new Properties();
		InputStream ins = null;
		try {
			ins = this.getClass().getResourceAsStream(filePath);
			prop.load(ins); // /加载属性列表
			Iterator<String> it = prop.stringPropertyNames().iterator();
			while (it.hasNext()) {
				String key = it.next();
				dataMap.put(key, prop.getProperty(key));
			}
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("读取" + filePath + "文件失败，失败原因:" + e.getMessage());
		} finally {
			if (null != ins) {
				try {
					ins.close();
				} catch (IOException e) {
					e.printStackTrace();
					throw new RuntimeException("关闭 读取properties的文件流失败，失败原因：" + e.getMessage());
				}
				ins = null;
			}
		}
	}

	public static void main(String[] args) {
		// 如果是在classPath的根目录下的话则直接用/然后再加上文件的路径
		PropertyUtil util = PropertyUtil.getInstance();
		System.out.println(util.getValue("aaa"));
	}

}
